/**
 * 数据验证工具
 */

/**
 * 验证电子邮件格式
 * @param {string} email 电子邮件地址
 * @returns {boolean} 是否有效
 */
const isValidEmail = (email) => {
  if (!email) return false;
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  return emailRegex.test(email);
};

/**
 * 验证手机号格式（中国大陆）
 * @param {string} phone 手机号
 * @returns {boolean} 是否有效
 */
const isValidPhone = (phone) => {
  if (!phone) return false;
  const phoneRegex = /^1[3-9]\d{9}$/;
  return phoneRegex.test(phone);
};

/**
 * 验证密码强度
 * 至少8位，包含大小写字母和数字
 * @param {string} password 密码
 * @returns {boolean} 是否有效
 */
const isStrongPassword = (password) => {
  if (!password || password.length < 8) return false;
  const hasUpperCase = /[A-Z]/.test(password);
  const hasLowerCase = /[a-z]/.test(password);
  const hasNumbers = /\d/.test(password);
  return hasUpperCase && hasLowerCase && hasNumbers;
};

/**
 * 验证字符串长度
 * @param {string} str 字符串
 * @param {number} min 最小长度
 * @param {number} max 最大长度
 * @returns {boolean} 是否有效
 */
const isValidLength = (str, min, max) => {
  if (str === undefined || str === null) return false;
  const length = String(str).length;
  return length >= min && length <= max;
};

/**
 * 验证是否为正整数
 * @param {number|string} num 数字
 * @returns {boolean} 是否有效
 */
const isPositiveInteger = (num) => {
  if (num === undefined || num === null) return false;
  return /^[1-9]\d*$/.test(String(num));
};

/**
 * 验证日期是否在将来
 * @param {Date|string} date 日期
 * @returns {boolean} 是否有效
 */
const isFutureDate = (date) => {
  if (!date) return false;
  const dateObj = new Date(date);
  const now = new Date();
  return dateObj > now;
};

module.exports = {
  isValidEmail,
  isValidPhone,
  isStrongPassword,
  isValidLength,
  isPositiveInteger,
  isFutureDate
}; 